package cn.tedu.kcircle.comment.front.repository.persist;


import cn.tedu.kcircle.comment.front.protocol.param.CommentAddParam;
import cn.tedu.kcircle.comment.front.service.bo.CommentListItemBO;
import cn.tedu.kcircle.comment.front.service.bo.CommentStandardBO;
import cn.tedu.kcircle.common.dto.ResourceDTO;
import cn.tedu.kcircle.common.po.PageData;

import java.util.Collection;
import java.util.List;

public interface CommentRepository {
    /**
     * 插入评论数据
     *
     * @param comment 评论数据
     * @return 受影响的行数
     */
    int insert(CommentAddParam comment);

    /**
     * 根据id删除评论数据
     *
     * @param id 评论ID
     * @return 受影响的行数
     */
    int deleteById(Long id);

    /**
     * 根据若干个ID批量删除评论数据
     *
     * @param idList 若干个评论ID的数组
     * @return 受影响的行数
     */
    int deleteByIds(Collection<Long> idList);

    /**
     * 根据文章删除评论数据
     *
     * @param resourceDTO 资源DTO
     * @return 受影响的行数
     */
    int deleteByResource(ResourceDTO resourceDTO);


    /**
     * 根据资源统计评论表中的数据的数量
     * @param resourceDTO 资源DTO
     * @return 文章匹配的评论数据的数量
     */
    Long countByResource(ResourceDTO resourceDTO);


    /**
     * 根据id查询评论数据详情
     *
     * @param id 评论ID
     * @return 匹配的评论数据详情，如果没有匹配的数据，则返回null
     */
    CommentStandardBO getStandardById(Long id);

    /**
     * 查询评论数据列表
     *
     * @param resourceType 资源类型
     * @param pageNum      页码
     * @param pageSize     每页记录数
     * @return 评论数据列表
     */
    PageData<CommentListItemBO> listByResourceType(Integer resourceType, Integer pageNum, Integer pageSize);
    /**
     * 用户评论数据列表
     *
     * @param  authorId 用户ID
     * @return 评论数据列表
     */
   List<CommentListItemBO> listByAuthorId(Long authorId);
}
